package com.telcordia.cvas.rpn;

public class RpnCalculator {
	private OperandStack values = new OperandStack();

	public int getXRegister() {
		return values.peek();
	}

	public void setXRegister(int value) {
		values.replaceTop(value);
	}

	public void enter() {
		values.push(getXRegister());
	}

	private void add() {
		new Add().execute(values);
	}

	private void subtract() {
		new Subtract().execute(values);
	}

	private void factorial() {
		new Factorial().execute(values);
	}

	public void perform(String operatorName) {
		if ("+".equals(operatorName))
			add();
		else if ("-".equals(operatorName))
			subtract();
		else if ("!".equals(operatorName))
			factorial();
		else
			throw new RuntimeException(operatorName + " not registered");
	}

}
